﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTReserva.Dominio;
using System.Data.SqlClient;

namespace RESTReserva.Persistencia
{
    public class ReservaDAO
    {

        public Reserva Crear(Reserva reservaACrear)
        {
            Reserva reservaCreado = null;
            string estado = "";
            string codigo1 ;
            int codP;
            if (reservaACrear.Estado == null) {
                estado = "D";
            }
            codigo1 = reservaACrear.Codigo;
            codP = Convert.ToInt32(codigo1);

            string sql = "INSERT INTO t_Reserva values(@cod, @fecha, @inicio, @fin, @cancha, @cliente, @monto, @estado)";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", reservaACrear.Codigo));
                    com.Parameters.Add(new SqlParameter("@fecha", reservaACrear.Fecha));
                    com.Parameters.Add(new SqlParameter("@inicio", reservaACrear.Inicio+7));
                    com.Parameters.Add(new SqlParameter("@fin", reservaACrear.Fin+7));
                    com.Parameters.Add(new SqlParameter("@cancha", reservaACrear.Cancha));
                    com.Parameters.Add(new SqlParameter("@cliente", reservaACrear.Cliente));
                    com.Parameters.Add(new SqlParameter("@monto", reservaACrear.Monto));
                    com.Parameters.Add(new SqlParameter("@estado", estado));
                    com.ExecuteNonQuery();
                }
            }
            reservaCreado = Obtener(reservaACrear.Codigo);
            return reservaCreado;
        }


        public Reserva Obtener(string codigo)
        {
            Reserva reservaEncontrado = null;
            int codigo1;
            int inicio1;
            int fin1;
            int cancha1;
            int cliente1;
            int monto1;
            string cadena1 = "";
            string fecha1 = "";
            string sql = "select * from t_Reserva WHERE codigo=@cod";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", Convert.ToInt32(codigo)));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            codigo1 = (int)resultado["codigo"];
                            fecha1  = Convert.ToString(resultado["fecha"]);
                            inicio1 = Convert.ToInt32(resultado["inicio"]);
                            fin1 = Convert.ToInt32(resultado["fin"]);
                            cancha1 = Convert.ToInt32(resultado["cancha"]);
                            cliente1 = Convert.ToInt32(resultado["cliente"]);
                            monto1 = Convert.ToInt32(resultado["monto"]);
                            cadena1 = codigo1 + "";
                            reservaEncontrado = new Reserva()
                            {
                                Codigo = (string)cadena1,
                                Fecha = (string)fecha1,
                                Inicio = inicio1,
                                Fin = fin1,
                                Cancha = cancha1,
                                Cliente = cliente1,
                                Monto = monto1,
                                Estado = (string)resultado["estado"]
                            };
                        }
                    }
                }
            }
            return reservaEncontrado;
        }

        public List<Reserva> ListarTodos()
        {
            //TODO:
            Reserva reservaListados = null;
            int codigo1;
            int inicio1;
            int fin1;
            int monto1;
            string cadena1 = "";
            string fecha1 = "";
            List<Reserva> lista = new List<Reserva>();
            string sql = "select r.codigo,r.fecha,r.inicio,r.fin,c.nombre as cancha,cl.nombre as cliente,r.monto,r.estado from t_Reserva r,t_Cancha c,t_Cliente cl where r.cancha = c.codigo and r.cliente = cl.codigo";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            codigo1 = (int)resultado["codigo"];
                            fecha1 = Convert.ToString(resultado["fecha"]);
                            inicio1 = Convert.ToInt32(resultado["inicio"]);
                            fin1 = Convert.ToInt32(resultado["fin"]);
                            monto1 = Convert.ToInt32(resultado["monto"]);
                            cadena1 = codigo1 + "";
                            reservaListados = new Reserva()
                            {
                                Codigo = (string)cadena1,
                                Fecha = (string)fecha1,
                                Inicio = inicio1,
                                Fin = fin1,
                                NombreCancha = (string)resultado["cancha"],
                                NombreCliente = (string)resultado["cliente"],
                                Monto = monto1,
                                Estado = (string)resultado["estado"]

                            };
                            lista.Add(reservaListados);
                        }

                    }
                }
            }
            return lista;
        }



        internal object ObtenerReserva(Reserva reservaACrear)
        {
            Reserva reservaEncontrado = null;
            int codigo1;
            int inicio1;
            int fin1;
            int cancha1;
            int cliente1;
            int monto1;
            string cadena1 = "";
            string fecha1 = "";
            string sql = "select * from t_Reserva WHERE cancha=@can and convert(char(10),fecha,103)=@fec and inicio=@ini and fin=@fin";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@can", reservaACrear.Cancha));
                    com.Parameters.Add(new SqlParameter("@fec", reservaACrear.Fecha));
                    com.Parameters.Add(new SqlParameter("@ini", reservaACrear.Inicio+7));
                    com.Parameters.Add(new SqlParameter("@fin", reservaACrear.Fin+7));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            codigo1 = (int)resultado["codigo"];
                            fecha1 = Convert.ToString(resultado["fecha"]);
                            inicio1 = Convert.ToInt32(resultado["inicio"]);
                            fin1 = Convert.ToInt32(resultado["fin"]);
                            cancha1 = Convert.ToInt32(resultado["cancha"]);
                            cliente1 = Convert.ToInt32(resultado["cliente"]);
                            monto1 = Convert.ToInt32(resultado["monto"]);
                            cadena1 = codigo1 + "";
                            reservaEncontrado = new Reserva()
                            {
                                Codigo = (string)cadena1,
                                Fecha = (string)fecha1,
                                Inicio = inicio1,
                                Fin = fin1,
                                Cancha = cancha1,
                                Cliente = cliente1,
                                Monto = monto1,
                                Estado = (string)resultado["estado"]
                            };
                        }
                    }
                }
            }
            return reservaEncontrado;
        }
    }
}